/*************************************************
  * 描述：通知提示框窗体类
  *
  * File：cxinoticewidget.h
  * Author：dongyao@mozihealthcare.cn
  * Date：2025/9/28
  * Update：
  * ************************************************/

#ifndef CXINOTICEWIDGET_H
#define CXINOTICEWIDGET_H

#include <QWidget>
#include <noticebox/cxinoticebox_p.h>

QT_BEGIN_NAMESPACE
namespace Ui
{
	class CxiNoticeWidget;
}
QT_END_NAMESPACE

class CxiNoticeWidget : public QWidget
{
	Q_OBJECT

public:
	// 构造函数：接收NoticeData初始化窗口
	explicit CxiNoticeWidget(const NoticeData& data, QWidget* parent = nullptr);
	~CxiNoticeWidget() override;
	// 获取当前窗口的消息数据
	NoticeData getData() const;

	// 停止自动关闭计时器（鼠标悬浮时调用）
	void stopAutoCloseTimer();

	// 重启自动关闭计时器（鼠标离开时调用）
	void restartAutoCloseTimer();
	NoticeData data() const;
	qint64 timestamp() const;
signals:
	// 窗口需要关闭时发出的信号（通知私有类移除）
	void needRemove(CxiNoticeWidget* widget);
	// MQ消息点击信号
	void mqClicked(const QVariant& mqData);
	// MQ消息双击信号
	void mqDoubleClicked(const QVariant& mqData);
	// 确认按钮点击信号
	void confirmClicked();

protected:
	// 重写鼠标事件
	void mousePressEvent(QMouseEvent* event) override;
	void mouseDoubleClickEvent(QMouseEvent* event) override;
	void mouseReleaseEvent(QMouseEvent* event) override;
	void enterEvent(QEvent* event) override;
	void leaveEvent(QEvent* event) override;
	//重写显示隐藏事件
	void showEvent(QShowEvent* event) override;// 显示时启动计时
	void hideEvent(QHideEvent* event) override;// 隐藏时停止计时
private slots:
	// 自动关闭计时器超时处理
	void onAutoCloseTimeout();
	// 关闭按钮点击处理
	void onCloseBtnClicked();
	// 确认按钮点击处理
	void onConfirmBtnClicked();

private:
	void init();
	NoticeData initData(const NoticeData& inputData);
	Ui::CxiNoticeWidget* ui;
	NoticeData m_data;// 消息数据
	qint64 m_createTimestamp;
	QTimer* m_autoCloseTimer;// 自动关闭计时器
	qint64 m_lastClickTime;  //鼠标点击时间记录
	QTimer* m_clickTimer;    // 单击判断定时器
};


#endif//CXINOTICEWIDGET_H
